package com.ruoyi.wechat.service.impl;

import java.util.ArrayList;
import java.util.List;
import java.util.Set;

import com.ruoyi.common.utils.uuid.IdUtils;
import com.ruoyi.wechat.domain.CCamp;
import com.ruoyi.wechat.mapper.CCampMapper;
import com.ruoyi.wechat.service.ICCampService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.stereotype.Service;


import javax.annotation.PostConstruct;

/**
 * 营地管理Service业务层处理
 * 
 * @author ruoyi
 * @date 2024-10-29
 */
@Service
public class CCampServiceImpl implements ICCampService
{
    @Autowired
    private CCampMapper cCampMapper;

    @Autowired
    private RedisTemplate redisTemplate;


    /**   * 项目启动初始化营地数据到redis   */
    @PostConstruct
    public void init(){
        //查询所有的营地数据
        List<CCamp> list =  cCampMapper.selectCCampList(new CCamp());
        //存储数据到redis
        list.forEach(cCamp->{
            redisTemplate.opsForZSet().add("camp:camp:sort",cCamp,0);
        });

    }

    @Override
    public CCamp wxSelectCampByCampId(String campId) {
        CCamp camp =  cCampMapper.selectCCampByCampId(campId);
       redisTemplate.opsForZSet().incrementScore("camp:camp:sort",camp,1);
       return camp;
    }

    @Override
    public List<CCamp> wxSelectCampSortList() {
        Set set = redisTemplate.opsForZSet().reverseRange("camp:camp:sort",  0, 9);
        return new ArrayList<>(set);
    }
    /**
     * 查询营地管理
     *
     * @param campId 营地管理主键
     * @return 营地管理
     */
    @Override
    public CCamp selectCCampByCampId(String campId) {
        return cCampMapper.selectCCampByCampId(campId);
    }
    /**
     * 查询营地列表
     *
     * @param cCamp 营地
     * @return 营地
     */

    @Override
    public List<CCamp> selectCCampList(CCamp cCamp) {
        return cCampMapper.selectCCampList(cCamp);
    }

    @Override
    public String insertCCamp(CCamp cCamp) {
        cCamp.setCampId(IdUtils.randomUUID());
        cCampMapper.insertCCamp(cCamp);
        redisTemplate.opsForZSet().add("camp:camp:sort",cCampMapper.selectCCampByCampId(cCamp.getCampId()),0);
        return cCamp.getCampId();
    }

    @Override
    public int updateCCamp(CCamp cCamp) {
        CCamp oldCamp =  cCampMapper.selectCCampByCampId(cCamp.getCampId());
        // 获取redis中旧数据的点击数
        Double score =  redisTemplate.opsForZSet().score("camp:camp:sort", oldCamp);
        // 将redis中旧数据删除
        redisTemplate.opsForZSet().remove("camp:camp:sort",  oldCamp);
        cCampMapper.updateCCamp(cCamp);
        CCamp newCamp =  cCampMapper.selectCCampByCampId(cCamp.getCampId());
        //将新数据以及点击数存到redis中
        redisTemplate.opsForZSet().add("camp:camp:sort", newCamp, score);
        return 1;
    }

    @Override
    public int deleteCCampByCampIds(String[] campIds) {
        return cCampMapper.deleteCCampByCampIds(campIds);
    }

    @Override
    public int deleteCCampByCampId(String campId) {
        redisTemplate.opsForZSet().remove("camp:camp:sort",cCampMapper.selectCCampByCampId(campId));
        return cCampMapper.deleteCCampByCampId(campId);
    }

    /**
     * 查询营地管理列表
     * 
     * @param cCamp 营地管理
     * @return 营地管理
     */

    /**
     * 新增营地管理
     * 
     * @param cCamp 营地管理
     * @return 结果
     */
//    @Override
//    public String insertCCamp(CCamp cCamp)
//    {
//        cCamp.setCampId(IdUtils.randomUUID());
//        cCampMapper.insertCCamp(cCamp);
//        redisTemplate.opsForZSet().add("camp:camp:sort",cCampMapper.selectCCampByCampId(cCamp.getCampId()),0);
//        return cCamp.getCampId();
//    }

    /**
     * 修改营地管理
     * 
     * @param cCamp 营地管理
     * @return 结果
     */
//    @Override
//    public int updateCCamp(CCamp cCamp)
//    {
//        CCamp oldCamp =  cCampMapper.selectCCampByCampId(cCamp.getCampId());
//        // 获取redis中旧数据的点击数
//        Double score =  redisTemplate.opsForZSet().score("camp:camp:sort", oldCamp);
//        // 将redis中旧数据删除
//        redisTemplate.opsForZSet().remove("camp:camp:sort",  oldCamp);
//        cCampMapper.updateCCamp(cCamp);
//        CCamp newCamp =  cCampMapper.selectCCampByCampId(cCamp.getCampId());
//        //将新数据以及点击数存到redis中
//        redisTemplate.opsForZSet().add("camp:camp:sort", newCamp, score);
//        return 1;
//    }

    /**
     * 批量删除营地管理
     * 
     * @param campIds 需要删除的营地管理主键
     * @return 结果
     */
//    @Override
//    public int deleteCCampByCampIds(String[] campIds)
//    {
//        return cCampMapper.deleteCCampByCampIds(campIds);
//    }

    /**
     * 删除营地管理信息
     * 
     * @param campId 营地管理主键
     * @return 结果
     */
//    @Override
//    public int deleteCCampByCampId(String campId)
//    {
//        redisTemplate.opsForZSet().remove("camp:camp:sort",cCampMapper.selectCCampByCampId(campId));
//        return cCampMapper.deleteCCampByCampId(campId);
//    }
}
